#import <MathematicaKit/MExpr.h>

@interface CocoaType : NSObject
{
	const char* _type;
}

- (id) initWithType: (const char*) type;
+ (id) typeWithType: (const char*) type;
- (void) dealloc;
- (NSString*) description;
- (CocoaType*) nextType;
- (int) byteCount;
- (MExpr*) exprForValue: (NSValue*) value;
- (NSValue*) valueForExpr: (MExpr*) e;

@end

@interface NSInvocation (CocoaTypeAdditions)

- (MExpr*) argumentExprAtIndex: (int) index;
- (BOOL) setArgumentExpr: (MExpr*) expr atIndex: (int) index message: (MExpr**) message;
- (MExpr*) returnExpr;
- (BOOL) setReturnExpr: (MExpr*) expr message: (MExpr**) message;

@end
